package com.hyl.icon.testdemo;

import java.awt.*;
import java.awt.font.FontRenderContext;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

public class ImageTextDrawer {
    public static void main(String[] args) {
        try {
            // 1. 读取图片
            File inputFile = new File("D:\\workspace\\icon\\test\\images\\icon.jpg");
            BufferedImage image = ImageIO.read(inputFile);

            // 2. 获取 Graphics2D 对象
            Graphics2D g2d = image.createGraphics();

            // 3. 启用抗锯齿
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

            // 4. 设置字体（可以加载自定义 .ttf 字体）
            Font font = loadFont("D:\\workspace\\icon\\test\\font\\SourceHanSansSC-VF.ttf", 50); // 自定义字体大小
            g2d.setFont(font);

            // 5. 设置颜色
            g2d.setColor(new Color(255, 0, 0)); // 红色字体

            // 6. 计算文本宽度，使文本居中
            String text = "你好，Java!";
            FontMetrics metrics = g2d.getFontMetrics(font);
            int x = (image.getWidth() - metrics.stringWidth(text)) / 2; // 居中
            int y = (image.getHeight() / 2) + (metrics.getAscent() / 2); // 垂直居中

            // 7. 绘制文本
            g2d.drawString(text, x, y);

            // 8. 释放资源
            g2d.dispose();

            // 9. 保存图片
            File outputFile = new File("D:\\workspace\\icon\\test\\images\\output.jpg");
            System.out.println(outputFile.getAbsolutePath());

            System.out.println("图片处理完成，保存为 output.jpg");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // 方法：加载自定义 TTF 字体
    private static Font loadFont(String fontPath, float size) {
        try {
            File fontFile = new File(fontPath);
            Font customFont = Font.createFont(Font.TRUETYPE_FONT, fontFile);
            return customFont.deriveFont(size);
        } catch (Exception e) {
            e.printStackTrace();
            return new Font("Serif", Font.PLAIN, (int) size); // 失败时使用默认字体
        }
    }
}
